<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button>按钮</button>
    <script>
        // 防抖:一个事件之内频繁触发,以最后一次为准

        // 1.普通方法
        // let btn = document.querySelector('button')
        // btn.addEventListener('click', function () {
        //     console.log('模拟发送ajax');
        // })

        // 2. 模拟lodash里面的方法 _.debounce(func, [wait = 0]) 研究原理
        let btn = document.querySelector('button')
        // 自己封装一个fd方法.实现某个函数的防抖处理
        btn.addEventListener('click', fd(function () {
            console.log('模拟发送ajax...');
        }, 1000));
        //封装一个方法实现防抖
        function fd(fn, time) {
            //定义一个定时器
            let timerID;
            // fd必须返回一个函数 
            return function () {
                // 先清除上一次的定时器(无论有没有执行)
                clearTimeout(timerID);
                // 思路:延时器的形式实现防抖,每次触发新的逻辑,清楚上一次的延时器
                timerID = setTimeout(() => {
                    fn();

                }, time)
            }
        }
    </script>
</body>

</html>